package de.mnit.basis.daten.typ.zeit.format;

import de.mnit.basis.daten.FormatText;
import de.mnit.basis.daten.FormatZahl;
import de.mnit.basis.daten.konstant.ZEIT;
import de.mnit.basis.daten.konstant.position.POSITION_H;
import de.mnit.basis.daten.typ.zeit.S_Datum;
import de.mnit.basis.daten.typ.zeit.S_Uhrzeit;
import de.mnit.basis.daten.typ.zeit.S_Zeitpunkt;
import de.mnit.basis.daten.typ.zeit.Zeit;
import de.mnit.basis.fehler.Fehler;

/**
 * @author Michael Nitsche
 */
public class FormatZeit {

	// UHRZEIT

	public static String zuText(S_Uhrzeit zeit, Object... format) {
		Fehler.objekt.wenn_Null(zeit);
		String erg="";
		for(Object o : format)
			if     (o instanceof String) erg+=o;
			else if(o==FORMAT_ZEIT.STD_2)	erg+=FormatZahl.breite(2, zeit.gStunden());
			else if(o==FORMAT_ZEIT.STD)		erg+=zeit.gStunden();
			else if(o==FORMAT_ZEIT.MIN_2)	erg+=FormatZahl.breite(2, zeit.gMinuten());
			else if(o==FORMAT_ZEIT.MIN)		erg+=zeit.gMinuten();
			else if(o==FORMAT_ZEIT.SEK_2)	erg+=FormatZahl.breite(2, zeit.gSekunden());
			else if(o==FORMAT_ZEIT.SEK)		erg+=zeit.gSekunden();
			else Fehler.objekt.da_HierUngueltig(o);
		return erg;
	}

	// DATUM

	public static String zuText(S_Datum datum, Object... format) {
		Fehler.objekt.wenn_Null(format);
		Fehler.zahl.wenn_Gleich(format.length, 0);
		String erg="";
		for(Object o : format)
			if     (o instanceof String) erg=erg+o;
			else if(o==FORMAT_DATUM.JAHR_4)
				erg=erg+FormatZahl.breite(4, datum.gJahr());
			else if(o==FORMAT_DATUM.JAHR_2) {
				String tmp=""+datum.gJahr();
				if(tmp.length()>=2)
					erg+=tmp.substring(tmp.length()-2, tmp.length());
				else
					erg+=FormatText.breite(2, '0', tmp, POSITION_H.RECHTS);
			}
			else if(o==FORMAT_DATUM.JAHR)				erg+=""+datum.gJahr();
			else if(o==FORMAT_DATUM.MONAT)				erg+=datum.gMonat();
			else if(o==FORMAT_DATUM.MONAT_2)			erg=erg+FormatZahl.breite(2, datum.gMonat());
			else if(o==FORMAT_DATUM.MONAT_TEXT)			erg+=ZEIT.MONATE_DE[datum.gMonat()-1];
			else if(o==FORMAT_DATUM.TAG)				erg+=datum.gTag();
			else if(o==FORMAT_DATUM.TAG_2)				erg+=FormatZahl.breite(2, datum.gTag());
			else if(o==FORMAT_DATUM._ALLE_TAGE_MONAT)	erg+=FormatZahl.breite(2, Zeit.gTageImMonat(datum.gMonat(), datum.gJahr()));
			else Fehler.objekt.da_HierUngueltig(o);
		return erg;
	}

	public static String zuTextEDV(S_Datum datum)	{ return zuText(datum, FORMAT_DATUM.GRUPPE_EDV); }
	public static String zuText(S_Datum datum)		{ return zuText(datum, FORMAT_DATUM.GRUPPE_STANDARD); }

	// ZEITPUNKT

	public static String zuText(S_Zeitpunkt zeit, Object... format) {
		Fehler.objekt.wenn_Null(zeit);
		String erg="";
		for(Object o : format)
			if     (o instanceof String)  erg+=o;
			else if(o instanceof FORMAT_DATUM)	erg+=zuText(zeit.gDatum(), o);
			else if(o instanceof FORMAT_ZEIT)	erg+=zuText(zeit.gUhrzeit(), o);
			else Fehler.objekt.da_HierUngueltig(o);
		return erg;
	}

	public static String zuTextEDV(S_Zeitpunkt zeit)		{ return zuText(zeit, FORMAT_ZEITPUNKT.GRUPPE_EDV); }
	public static String zuTextDS(S_Zeitpunkt zeit)			{ return zuText(zeit, FORMAT_ZEITPUNKT.GRUPPE_DS); }
	public static String zuText(S_Zeitpunkt zeit)			{ return zuText(zeit, FORMAT_ZEITPUNKT.GRUPPE_STANDARD); }

}
